#include "../Device/key.h"

#include "main.h"

#define SIGN_PROLOAD (30)

#ifdef DEBUG
uint8_t sign[KEY_NUMBER];
#else
static uint8_t sign[KEY_NUMBER];
#endif

bool Key_Update(Key_Name_t name) {
  bool tmp;
  switch (name) {
    case KEY_2_2:
      tmp = HAL_GPIO_ReadPin(SENSOR_2_2_GPIO_Port, SENSOR_2_2_Pin);
      break;
    case KEY_2_3:
      tmp = HAL_GPIO_ReadPin(SENSOR_2_3_GPIO_Port, SENSOR_2_3_Pin);
      break;
    case KEY_2_4:
      tmp = HAL_GPIO_ReadPin(SENSOR_2_4_GPIO_Port, SENSOR_2_4_Pin);
      break;
    case KEY_3_1:
      tmp = HAL_GPIO_ReadPin(SENSOR_3_1_GPIO_Port, SENSOR_3_1_Pin);
      break;
    case KEY_3_4:
      tmp = HAL_GPIO_ReadPin(SERSOR_3_4_GPIO_Port, SERSOR_3_4_Pin);
      break;
    default:
      return false;
  }
  if (tmp && sign[name] > 0) sign[name]--;
  if ((!tmp) && sign[name] == 0) {
    sign[name] = SIGN_PROLOAD;
    return true;
  }
  return false;
}

Key_Name_t Key_Scan() {
  for (Key_Name_t i = KEY_2_2; i < KEY_NUMBER; i++) {
    if (Key_Update(i)) return i;
  }
  return KEY_NUMBER;
}
